[Swift 3] 型名を取得する
Swift 3 で dynamicType が削除された
Swift 2.x において、型名を取得するには dynamicType
プロパティを使用する方法が一般的でした。しかし Swift 3 では dynamicType
プロパティが削除され、別な方法が提供されました。
// Swift 2.x まで let text = "Hello!" String(text.dynamicType)
String(describing:) と type(of:) を使う
Swift 3 からは、String 型のイニシャライザとして String(describing:)
が、そして値の型を取得するための関数 type(:of)
追加されました。これらを組み合わせて、型名を文字列として取得することができます。
// Swift 3 から let text = "Bonjour!" String(describing: type(of: text))
.Type のおさらい
type(:of)
を使ってみると分かりますが、type(:of)
で取得できる値は .Type
になっています。String であれば、String.Type
が取得できます。
この .Type
は何かと言うと、メタタイプと呼ばれている型です。メタタイプはクラスやストラクチャ、列挙型、プロトコルが何であるか判別するための特別な型です。プロトコルだけ特別に .Protocol
となります。どの型からでも使うことができるようになっています。
型名の後に .self
を付けることで、型自体から取得することもできます。String(describing:)
は、このメタタイプを引数と取るため、型名から型名の文字列を生成することもできます。
// ClassMethodクラスを定義 class ClassMethod { } // メタタイプを取得 let type = ClassMethod.self // 型名の文字列を生成 let typeString = String(describing: type)
詳しくは Swift Programming Language の Metatype Type を参照してください。
まとめ
インターネット上には、まだまだ Swift 2.x の情報が多く、こういうマイナーな変更は調べるのに地味に時間を取られてしまいがちです。Developers.IO では、引き続き最新の技術情報をお届けしていきますので是非参考にしてください。